package com.df.ez_game.server;

import com.df.ez_game.server.msg.client.ClientReqMsg;
import com.df.ez_game.server.msg.client.ClientRespMsg;
import io.netty.channel.ChannelHandlerContext;

public interface UserLifeCycleCb {

    //=======================channel的生命周期==============================
    /**
     * 连接激活
     * @param ctx
     */
    void channelActive(ChannelHandlerContext ctx);

    /**、
     * 连接失活
     * @param ctx
     */
    void channelInactive(ChannelHandlerContext ctx);

    /**
     * 连接异常
     * @param ctx
     */
    void exceptionCaught(ChannelHandlerContext ctx);

    //=======================channel的生命周期==============================

    //=======================用户的生命周期==============================
    /**
     * 用户认证成功，不会广播，广播时间交给用户
     * @param ctx
     */
    void login(ChannelHandlerContext ctx);

    /**
     * 用户离线(正常离线或连接异常断开离线)，会广播
     * @param ctx
     */
    void offline(ChannelHandlerContext ctx);

    //=======================用户的生命周期==============================

    //=======================消息的生命周期==============================

    /**
     * 收到客户端消息
     * @param ctx
     * @param req 解析后的请求，如果解析失败，这里是null
     * @param parseSuccess 请求是否解析成功
     */
    void receiveMsg(ChannelHandlerContext ctx, ClientReqMsg req, boolean parseSuccess);

    /**
     * 回复消息给客户端
     * @param ctx
     * @param resp 回复的消息
     * @param length 消息字节长度
     */
    void respMsg(ChannelHandlerContext ctx, ClientRespMsg resp, int length);



    //=======================消息的生命周期==============================
}
